
import { IsNotEmpty, IsString, IsOptional, IsInt, MaxLength, ArrayMinSize, IsArray, ValidateNested, isNotEmpty } from 'class-validator';
import { BaseRequestListDto } from './baseRequestList.dto';
import { Type } from 'class-transformer';

export class CreateFieldInfoListDto {
    @IsNotEmpty({message:"表id不能为空"})
    id!:number;

    @IsArray({ message: 'list必须是数组' })
    // @ArrayMinSize(1, { message: 'list不能为空数组' })
    @ValidateNested({ each: true }) // 校验每个数组项
    @Type(() => CreateFieldInfoDto) // 必须配合class-transformer
    fieldInfoList!:CreateFieldInfoDto[]



}



export class CreateFieldInfoDto {
    @IsOptional()
    id?: number;

    createdAt?:string;

    updatedAt?:string;

    /**状态(0-禁用,1-正常)*/
    @IsOptional()
    status?: number;


    /**备注*/
    @IsOptional()
    comment?: string;


    /**字段代码*/
    @IsNotEmpty({ message: '字段代码不能为空' })
    code!: string;


    /**字段名称*/
    @IsNotEmpty({ message: '字段名称不能为空' })
    name!: string;


    /**数据类型*/
    @IsNotEmpty({ message: '数据类型不能为空' })
    dataType!: string;


    /**数据长度*/
    @IsOptional()
    dataTypeLength?: number;


    /**是否为主键*/
    @IsOptional()
    isKey?: number;


    /**是否可为空*/
    @IsOptional()
    isNull?: number;


    /**是否可插入*/
    @IsOptional()
    isInsert?: number;


    /**是否可编辑*/
    @IsOptional()
    isEdit?: number;


    /**是否在列表显示*/
    @IsOptional()
    isList?: number;


    /**是否可查询*/
    @IsOptional()
    isQuery?: number;


    /**查询方式*/
    @IsOptional()
    queryType?: string;


    /**是否必填*/
    @IsOptional()
    isRequired?: number;


    /**显示类型*/
    @IsOptional()
    htmlType?: string;


    /**父级字段ID*/
    // @IsNotEmpty({ message: '父级字段ID不能为空' })
    parentId?: number;


    /**排序权重，数值越小越靠前，默认0*/
    @IsOptional()
    sortOrder?: number;

    
    /**默认值*/
    @IsOptional()
    defaultValue?: string;

}

export class UpdateFieldInfoDto {
    @IsNotEmpty({ message: 'id不能为空' })
    id!: number;


    /**状态(0-禁用,1-正常)*/
    @IsOptional()
    status?: number;


    /**备注*/
    @IsOptional()
    comment?: string;


    /**字段代码*/
    @IsOptional()
    code?: string;


    /**字段名称*/
    @IsOptional()
    name?: string;


    /**数据类型*/
    @IsOptional()
    dataType?: string;


    /**数据长度*/
    @IsOptional()
    dataTypeLength?: number;


    /**是否为主键*/
    @IsOptional()
    isKey?: number;


    /**是否可为空*/
    @IsOptional()
    isNull?: number;


    /**是否可插入*/
    @IsOptional()
    isInsert?: number;


    /**是否可编辑*/
    @IsOptional()
    isEdit?: number;


    /**是否在列表显示*/
    @IsOptional()
    isList?: number;


    /**是否可查询*/
    @IsOptional()
    isQuery?: number;


    /**查询方式*/
    @IsOptional()
    queryType?: string;


    /**是否必填*/
    @IsOptional()
    isRequired?: number;


    /**显示类型*/
    @IsOptional()
    htmlType?: string;


    /**父级字段ID*/
    @IsOptional()
    parentId?: number;


    /**排序权重，数值越小越靠前，默认0*/
    @IsOptional()
    sortOrder?: number;

        /**默认值*/
    @IsOptional()
    defaultValue?: string;

}

export class QueryFieldInfoDto extends BaseRequestListDto {

    /**状态(0-禁用,1-正常)*/
    @IsOptional()
    status?: number;


    /**备注*/
    @IsOptional()
    comment?: string;


    /**字段代码*/
    @IsOptional()
    code?: string;


    /**字段名称*/
    @IsOptional()
    name?: string;


    /**数据类型*/
    @IsOptional()
    dataType?: string;


    /**数据长度*/
    @IsOptional()
    dataTypeLength?: number;


    /**是否为主键*/
    @IsOptional()
    isKey?: number;


    /**是否可为空*/
    @IsOptional()
    isNull?: number;


    /**是否可插入*/
    @IsOptional()
    isInsert?: number;


    /**是否可编辑*/
    @IsOptional()
    isEdit?: number;


    /**是否在列表显示*/
    @IsOptional()
    isList?: number;


    /**是否可查询*/
    @IsOptional()
    isQuery?: number;


    /**查询方式*/
    @IsOptional()
    queryType?: string;


    /**是否必填*/
    @IsOptional()
    isRequired?: number;


    /**显示类型*/
    @IsOptional()
    htmlType?: string;


    /**父级字段ID*/
    @IsOptional()
    parentId?: number;


    /**排序权重，数值越小越靠前，默认0*/
    @IsOptional()
    sortOrder?: number;

        /**默认值*/
    @IsOptional()
    defaultValue?: string;

}

export class DeleteFieldInfoDto {
    @IsNotEmpty({ message: 'ID列表不能为空' })
    @IsInt({ each: true, message: '每个ID必须是整数' })
    ids!: number[];
}


export class SelectOneFieldInfoDto {
    @IsNotEmpty({ message: 'ID不能为空' })
    id!: number;
}



class SortFieldInfoItemDto {
    @IsInt({ message: 'id必须是整数' })
    @IsNotEmpty({ message: 'ID不能为空' })
    id!: number;

    @IsInt({ message: 'sort必须是整数' })
    @IsNotEmpty({ message: '排序不能为空' })
    sortOrder!: number;
}
export class SortFieldInfoDto {
    @IsArray({ message: 'list必须是数组' })
    @ArrayMinSize(1, { message: 'list不能为空数组' })
    @ValidateNested({ each: true }) // 校验每个数组项
    @Type(() => SortFieldInfoItemDto) // 必须配合class-transformer
    list!: SortFieldInfoItemDto[];
}


export class FieldInfoResponseDto extends BaseRequestListDto {
    /**id*/
    @IsOptional()
    id?: number;

    /**创建时间*/
    @IsOptional()
    createdAt?: string;

    /**更新时间*/
    @IsOptional()
    updatedAt?: string;



    /**状态(0-禁用,1-正常)*/
    @IsOptional()
    status?: number;


    /**备注*/
    @IsOptional()
    comment?: string;


    /**字段代码*/
    @IsOptional()
    code?: string;


    /**字段名称*/
    @IsOptional()
    name?: string;


    /**数据类型*/
    @IsOptional()
    dataType?: string;


    /**数据长度*/
    @IsOptional()
    dataTypeLength?: number;


    /**是否为主键*/
    @IsOptional()
    isKey?: number;


    /**是否可为空*/
    @IsOptional()
    isNull?: number;


    /**是否可插入*/
    @IsOptional()
    isInsert?: number;


    /**是否可编辑*/
    @IsOptional()
    isEdit?: number;


    /**是否在列表显示*/
    @IsOptional()
    isList?: number;


    /**是否可查询*/
    @IsOptional()
    isQuery?: number;


    /**查询方式*/
    @IsOptional()
    queryType?: string;


    /**是否必填*/
    @IsOptional()
    isRequired?: number;


    /**显示类型*/
    @IsOptional()
    htmlType?: string;


    /**父级字段ID*/
    @IsOptional()
    parentId?: number;


    /**排序权重，数值越小越靠前，默认0*/
    @IsOptional()
    sortOrder?: number;

        /**默认值*/
    @IsOptional()
    defaultValue?: string;

}
